From 44c4faeed06aca1711b45089ec0cae55c49aa11d Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Tue, 1 Aug 2017 10:09:01 +0100 Subject: [PATCH] Entry: Fix unset icon tooltip hiding Entry tooltip Our ::query-tooltip handler first checks whether the pointer is over any of the icons, returning their tooltip if so, and if not chains up to Widget::query-tooltip in order to show the text for the widget overall. But ensure_has_tooltip(), which exists to update :has-tooltip based on whether ::query-tooltip is needed, only set :has-tooltip to TRUE if any icon had a tooltip, without caring whether the widget as a whole does. That is asymmetrical and meant that if the Entry had a tooltip, but subsequently all icons had their tooltips unset, :has-tooltip would be set to FALSE, and hence the tooltip for the widget would become lost. The fix is to set :has-tooltip to TRUE if the widget has a tooltip of its own, and we only need to check the icons if that is not the case. https://bugzilla.gnome.org/show_bug.cgi?id=785672 --- gtk/gtkentry.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index af12425ca3..1d8223a3d9 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -8085,18 +8085,18 @@ gtk_entry_get_icon_area (GtkEntry *entry, static void ensure_has_tooltip (GtkEntry *entry) { - GtkEntryPrivate *priv; - EntryIconInfo *icon_info; - int i; - gboolean has_tooltip = FALSE; + gboolean has_tooltip = gtk_widget_get_tooltip_text (GTK_WIDGET (entry)) != NULL; - priv = entry->priv; - - for (i = 0; i < MAX_ICONS; i++) + if (!has_tooltip) { - if ((icon_info = priv->icons[i]) != NULL) + GtkEntryPrivate *priv = entry->priv; + int i; + + for (i = 0; i < MAX_ICONS; i++) { - if (icon_info->tooltip != NULL) + EntryIconInfo *icon_info = priv->icons[i]; + + if (icon_info != NULL && icon_info->tooltip != NULL) { has_tooltip = TRUE; break; -- 2.30.2